package com.gopay.common.domain.cbrmb.internationalcard;

import com.gopay.common.constants.approval.DecisionValue;
import com.gopay.common.constants.trans.DrawOpType;
import com.gopay.common.domain.BaseEntity;
import com.gopay.common.domain.acps.model.AcctMastBean;
import com.gopay.common.domain.bank.BcdlMessage;
import com.gopay.common.domain.cbrmb.CbRmbBankAcctInfo;
import com.gopay.common.domain.cust.CustBankAcctInfo;

import java.math.BigDecimal;

/**
 * 外卡提现申请数据对象
 * 
 * @Tran01741VO.java
 * @author qld
 * @2017-10-27 下午03:57:30 www.gopay.com.cn Inc.All rights reserved.
 */
public class Tran01741VO extends BaseEntity {

    private static final long serialVersionUID = 1L;

    public static final String MAPKEY_PAYORDER = "payOrder";
    public static final String MAPKEY_BANKLIST = "banklist";
    
    
    public static final  BigDecimal LIMIT_MONEY = new BigDecimal("9999999999.99");
    
    /**
     * 申请用户userId
     */
    private String userId;
    /**
     * 付款方账号
     */
    private String acctId;
    /**
     * 付款方账号名称
     */
    private String acctName;
    /**
     * 提现银行ID（仅申请）
     */
    private Long bankId;
    /**
     * 提现金额
     */
    private BigDecimal txnAmt;

    /**
     * 手续费金额
     */
    private BigDecimal feeAmt;
    
    /**
     * 国付宝订单号（申请为空）
     */
    private String gopayOrderId;
    /**
     * 支付密码（仅确认申请）
     */
    private String payPwd;

    /**
     * 操作类型：申请、申请确认、审核 DrawOpType
     */
    private DrawOpType opType;

    /**
     * 审批结果（仅控制台审批） DecisionValue
     */
    private DecisionValue decision;

    /**
     * 审批描述（仅控制台审批）
     */
    private String decisionMsg;

    /**
     * 控制台审批人
     */
    private String operatorId;

    /**
     * 提现银行数据
     */
    private CbRmbBankAcctInfo bank;
    
    /**
     * 是否线下支付
     */
    private boolean isOffPay;
    
    /**
     * 线下付款银行代码
     */
    private String offLineBankCode;
    
    /**
     * 线下付款银行订单号
     */
    private String offLineBankOrderNum;
    
    /**
     * 付款客户
     */
    private String payCustId;

    /**
     * 银企直联
     */
    private BcdlMessage bcdl;
    
    /**
     * 指纹信息
     */
    private String fingerInfo;
    
    /**
     * 客户端Ip
     */
    private String clientIp;
    
    /**
     * 客户名
     */
    private String custName;
    
    /**
     * 账户信息（确认CPS赋值）
     */
    private AcctMastBean acct;
    
    /**
     * sessionId
     */
    private String sessionId;
    
    /**
     * 自动结算的节假日白名单规则ID
     */
    private String ruleId;
    
    /**
     * 是否自动结算转线下
     */
    private boolean isAuto2Offline = false;
    
    
    /**
     * 
     * custId
     */
    private String custId;
    
    /**
     * 动态口令
     * @return
     */
    private String dcPass;
    /**
     * 是否自动提现
     */
    private boolean isAutoDraw = false;
    
    /**
     * 提现请求来源
     */
    private String source;
    
    /** 发送通知需要流水   **/
    private Integer transDtlSq; 
    
    /** 手续费为云平台承担时，需要平台账户**/
    private String cloudAcctId;
    
    private String merId;
    
    private String merOrderId;
    
    /** 支付方式**/
    private String payType;
    
    /**免验限额**/
    private BigDecimal quota; 

    //G商融通添加,平台账户
    private String terraceAcct;
    
    /**
     * 是否T+1优化
     */
    private Integer isOptimizingSettle;
    
    /**
     * 提现备注信息（云账户提现时使用）
     */
    private String remark;
    
    /**
     * 是否已经验证过动态口令 设置为true 表示已经验证过 动态口令 (该字段 针对portal 提现设置 校验短信认证 和 动态口令顺序)
     */
    private boolean hasCheckedDcPass;


    private BigDecimal realtoAmt;//实际到账金额  add by liuyong
    
    /**
     * 结算周期类型 00- T+N 第n个交易日结算;01- D+N 每日结算
     */
    private String settlementType;
    
    /**
     * 结算操作类型 01 手工，02 实时，03 自动
     */
    private String settlementOperationType;
    

    public String getPayType() {
        return payType;
    }

    public void setPayType(String payType) {
        this.payType = payType;
    }


    public String getMerOrderId() {
        return merOrderId;
    }

    public void setMerOrderId(String merOrderId) {
        this.merOrderId = merOrderId;
    }
    
    public String getMerId() {
        return merId;
    }

    public void setMerId(String merId) {
        this.merId = merId;
    }
    
    public String getTerraceAcct() {
		return terraceAcct;
	}

	public void setTerraceAcct(String terraceAcct) {
		this.terraceAcct = terraceAcct;
	}

	public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public Long getBankId() {
        return bankId;
    }

    public void setBankId(Long bankId) {
        this.bankId = bankId;
    }

    public BigDecimal getTxnAmt() {
        return txnAmt;
    }

    public void setTxnAmt(BigDecimal txnAmt) {
        this.txnAmt = txnAmt;
    }

    public String getGopayOrderId() {
        return gopayOrderId;
    }

    public void setGopayOrderId(String gopayOrderId) {
        this.gopayOrderId = gopayOrderId;
    }

    public String getPayPwd() {
        return payPwd;
    }

    public void setPayPwd(String payPwd) {
        this.payPwd = payPwd;
    }

    public void setOpType(DrawOpType opType) {
        this.opType = opType;
    }

    public DrawOpType getOpType() {
        return opType;
    }

    public DecisionValue getDecision() {
        return decision;
    }
    
    public void setDecision(DecisionValue decision) {
        this.decision = decision;
    }

    public void setDecisionMsg(String decisionMsg) {
        this.decisionMsg = decisionMsg;
    }

    public String getDecisionMsg() {
        return decisionMsg;
    }

    public void setOperatorId(String operatorId) {
        this.operatorId = operatorId;
    }

    public String getOperatorId() {
        return operatorId;
    }
    public String getAcctId() {
        return acctId;
    }
    public void setAcctId(String acctId) {
        this.acctId = acctId;
    }
    public void setBank(CbRmbBankAcctInfo bank) {
        this.bank = bank;
    }
    public CbRmbBankAcctInfo getBank() {
        return bank;
    }
    public void setAcctName(String acctName) {
        this.acctName = acctName;
    }
    public String getAcctName() {
        return acctName;
    }
    public void setFeeAmt(BigDecimal feeAmt) {
        this.feeAmt = feeAmt;
    }
    public BigDecimal getFeeAmt() {
        return feeAmt;
    }

	public boolean isOffPay() {
		return isOffPay;
	}

	public void setOffPay(boolean isOffPay) {
		this.isOffPay = isOffPay;
	}

	public String getOffLineBankCode() {
		return offLineBankCode;
	}

	public void setOffLineBankCode(String offLineBankCode) {
		this.offLineBankCode = offLineBankCode;
	}

	public String getOffLineBankOrderNum() {
		return offLineBankOrderNum;
	}

	public void setOffLineBankOrderNum(String offLineBankOrderNum) {
		this.offLineBankOrderNum = offLineBankOrderNum;
	}

	public String getPayCustId() {
		return payCustId;
	}

	public void setPayCustId(String payCustId) {
		this.payCustId = payCustId;
	}

	public BcdlMessage getBcdl() {
		return bcdl;
	}

	public void setBcdl(BcdlMessage bcdl) {
		this.bcdl = bcdl;
	}

	public String getFingerInfo() {
		return fingerInfo;
	}

	public void setFingerInfo(String fingerInfo) {
		this.fingerInfo = fingerInfo;
	}

	public String getClientIp() {
		return clientIp;
	}

	public void setClientIp(String clientIp) {
		this.clientIp = clientIp;
	}

	public String getCustName() {
		return custName;
	}

	public void setCustName(String custName) {
		this.custName = custName;
	}

	public AcctMastBean getAcct() {
		return acct;
	}

	public void setAcct(AcctMastBean acct) {
		this.acct = acct;
	}

	public String getSessionId() {
		return sessionId;
	}

	public void setSessionId(String sessionId) {
		this.sessionId = sessionId;
	}

    public String getRuleId() {
        return ruleId;
    }

    public void setRuleId(String ruleId) {
        this.ruleId = ruleId;
    }

	public boolean isAuto2Offline() {
		return isAuto2Offline;
	}

	public void setAuto2Offline(boolean isAuto2Offline) {
		this.isAuto2Offline = isAuto2Offline;
	}

	public String getCustId() {
		return custId;
	}

	public void setCustId(String custId) {
		this.custId = custId;
	}

	public String getDcPass() {
		return dcPass;
	}

	public void setDcPass(String dcPass) {
		this.dcPass = dcPass;
	}

    public boolean isAutoDraw() {
        return isAutoDraw;
    }

    public void setAutoDraw(boolean isAutoDraw) {
        this.isAutoDraw = isAutoDraw;
    }

	public String getSource() {
		return source;
	}

	public void setSource(String source) {
		this.source = source;
	}

	public Integer getTransDtlSq() {
		return transDtlSq;
	}

	public void setTransDtlSq(Integer transDtlSq) {
		this.transDtlSq = transDtlSq;
	}

	public String getCloudAcctId() {
		return cloudAcctId;
	}

	public void setCloudAcctId(String cloudAcctId) {
		this.cloudAcctId = cloudAcctId;
	}
	public Integer getIsOptimizingSettle() {
		return isOptimizingSettle;
	}

	public void setIsOptimizingSettle(Integer isOptimizingSettle) {
		this.isOptimizingSettle = isOptimizingSettle;
	}

    public BigDecimal getQuota() {
        return quota;
    }

    public void setQuota(BigDecimal quota) {
        this.quota = quota;
    }

    public String getRemark() {
        return remark;
    }
	public boolean isHasCheckedDcPass() {
		return hasCheckedDcPass;
	}

    public void setRemark(String remark) {
        this.remark = remark;
    }


    public BigDecimal getRealtoAmt() {
        return realtoAmt;
    }

    public void setRealtoAmt(BigDecimal realtoAmt) {
        this.realtoAmt = realtoAmt;
    }

    public void setHasCheckedDcPass(boolean hasCheckedDcPass) {
		this.hasCheckedDcPass = hasCheckedDcPass;
	}
    
	public String getSettlementType() {
		return settlementType;
	}

	public void setSettlementType(String settlementType) {
		this.settlementType = settlementType;
	}

	public String getSettlementOperationType() {
		return settlementOperationType;
	}

	public void setSettlementOperationType(String settlementOperationType) {
		this.settlementOperationType = settlementOperationType;
	}

	/**
	 * add by zyt，toString中，对密码进行*显示，防止打印日志。出现密码的情况。
	 * 2017-1-6
	 */
	@Override
	public String toString() {
		return "Tran01741VO [userId=" + userId + ", acctId=" + acctId + ", acctName=" + acctName + ", bankId=" + bankId
				+ ", txnAmt=" + txnAmt + ", feeAmt=" + feeAmt + ", gopayOrderId=" + gopayOrderId + ", payPwd=" + "**** ****"
				+ ", opType=" + opType + ", decision=" + decision + ", decisionMsg=" + decisionMsg + ", operatorId="
				+ operatorId + ", bank=" + bank + ", isOffPay=" + isOffPay + ", offLineBankCode=" + offLineBankCode
				+ ", offLineBankOrderNum=" + offLineBankOrderNum + ", payCustId=" + payCustId + ", bcdl=" + bcdl
				+ ", fingerInfo=" + fingerInfo + ", clientIp=" + clientIp + ", custName=" + custName + ", acct=" + acct
				+ ", sessionId=" + sessionId + ", ruleId=" + ruleId + ", isAuto2Offline=" + isAuto2Offline + ", custId="
				+ custId + ", dcPass=" + dcPass + ", isAutoDraw=" + isAutoDraw + ", source=" + source + ", transDtlSq="
				+ transDtlSq + ", cloudAcctId=" + cloudAcctId + ", merId=" + merId + ", merOrderId=" + merOrderId
				+ ", payType=" + payType + ", quota=" + quota + ", terraceAcct=" + terraceAcct + ", isOptimizingSettle="
				+ isOptimizingSettle + ", remark=" + remark + ", hasCheckedDcPass=" + hasCheckedDcPass + ", settlementType="
				+ settlementType + ", settlementOperationType=" + settlementOperationType + "]";
	}
}
